Baze
by Nyxxy
Summary: to be modified
1. Chapter 1

Atestat 2010. Subiecte baze de date

considera tabela ANGAJATI cu structura:

CNP, NUME, DATA_ANGAJARE, DATA_NASTERE, SALARIU.

a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

b. Sa se afiseze pe ecran toti angajatii cu o vechime mai mare de 10 ani;

c. Stergeti din baza de date toate persoanele cu numele dat de la tastatura;

d. Afisati pe ecran numele celor mai vechi angajati;

e. Modificati salariul persoanei cu numele Popescu marindu-l cu 10%;

f. Afisati numarul de angajari din fiecare an.

Rezolvare:

b. select * from angajati where ((sysdate-data_angajare)/3650) 10;

c. delete from angajati where nume=:x;

d. select nume from angajati where data_angajare=(select min(data_angajare) from angajati);

e. select salariu+10*salariu/100 from angajati where nume='Popescu';

f. select count(*) from angajati as „nr_ang", to char(data_a,'yyyy') from angajati group by

to_char(data_a, 'yyyy')

considera tabela ELEVI cu structura:

NUME_PREN , NOTA_RO, NOTA_MAT, NOTA_GI, REZULTAT, MEDIE

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

câmpul Rezultat cu valoarea promovat daca elevul a promovat testul national

(note minimum 5 la cele 3 discipline) nepromovat în caz contrar;

elevii promovati calculati media generala la disciplina româna;

procentul de promovabilitate (nr elevi promovati / nr elevi înscrisi);

elevii care au obtinut cea mai mare medie;

pe ecran elevii grupati dupa rezultat (promovat/nepromovat), apoi alfabetic dupa

nume;

Rezolvare:

c. select avg(nota_ro) from elevi where rezultat='promovat';

d. select ((select count (*) from elevi where rezultat='promovat')/(select count (*) from elevi))

from dual

e. select num_pren, medie from elevi where medie=(select max(medie) from elevi);

f. select * from elevi order by rezultat desc, nume_pren.

considera tabela FILME cu structura:

NUME, GEN, BUGET, DATA_AP

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

pe ecran filmele gen "comedie" cu buget 10000;

toate filmele din tabela grupate pe genuri;

filmul care a avut cel mai mare buget;

din tabela filmele in aparute înainte de 1-ian-1990;

bugetul total al tuturor filmelor gen "aventura".

Rezolvare:

b. select nume from filme where gen='comedie' and buget10000;

c. select nume, gen, buget, data_ap from filme order by gen;

d. select nume from filme where buget=(select max(buget) from filme);

e. delete from filme where data_ap'1-01-1991';

f. select sum(buget) from filme where gen='comedie';

considera tabela ELEVI cu structura:

NUME, CLASA, MEDIE, ABS_NEM

g.

Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare

h.

Afisati elevul (elevii) cu media cea mai mare din clasa 12A;

i.

Afisati pe ecran în ordine alfabetica elevii cu peste 20 absente nemotivate;

j.

Aflati suma totala a absentelor nemotivate pe fiecare clasa;

k.

Stergeti elevii cu peste 40 absente nemotivate;

l. Elevul "Popescu Gigel" se muta din clasa 12A în clasa 12B. Faceti modificarile necesare.

Rezolvare:

nume from elevi where medie=(select max(medie) from elevi where clasa='12a') and

clasa='12a';

* from elevi where abs_nem20 order by nume;

clasa, sum(abs_nem) as „total_absente" from elevi group by clasa;

from elevi where abs_nem40;

elevi set clasa='12b' where nume='popescu gigel'.

5. Se considera tabela PROFESORI cu structura:

NUME, GRAD, DATA_NAST, CATEDRA, SALAR, DIRIG

a.

Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor

urmatoare

b.

Afisati profesorii cu gradul I;

c.

Aflati salariul mediu pe coala si numarul de profesori care au mai putin de salariul

mediu

d.

Afisati alfabetic profesorii care sunt diriginti.

e.

Stergeti din tabela profesorii care împlinesc 60 ani in anul calendaristic curent

f. Afisati numarul de profesori de la fiecare catedra.

Rezolvare:

b. select nume from profesori where grad=1;

c. select count(*) from profesori where salariu(select avg(salariu) from profesori);

d. select nume from profesori where dirig='da' order by nume;

e. delete from profesori where (sysdate-data_nast)/365=60;

f. select count (*), catedra from profesori group by catedra.

6.

Se considera tabela EXCURSII cu structura:

DESTI NATIE, DATA_PL, PRET, DURATA, TRANSPORT (avion, autocar, etc)

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor

urmatoare

excursiile din tabela cu destinatia "NISA" ordonate crescator dupa data

plecarii

destinatia (destinatiile) cea mai ieftina

excursiile din tabela grupate pe destinatii

pretul la excursiile cu avionul (pretul excursiei scade cu 25%)

din tabela excursiile care s-au desfasurat sau care sunt in curs de desfasurare

(au data plecarii anterioara datei curente)

Rezolvare:

b. select * from excursii where destinatie='nisa' order by data_pl;

c. select destinatie from excursii where pret=(select min(pret) from excursii);

d. select destinatie from excursii group by destinatie;

e. update excursii set pret=pret-25*pret/100 where transport='avion';

f. delete from excursii where data_pl=sysdate.

considera tabela CIOCOLATA cu structura:

SORTIMENT, PRET_BUC, FIRMA_PROD

a.

Sa se creeze tabela si sa se introduca 10 articole care sa corespunda

cerintelor urmatoare;

b.

Afisati sortimentele de ciocolata ce au pretul_bucata 20 Ron ordonata

alfabetic dupa firma producatoare;

c.

Aflati firma (firmele) ce produce cea mai ieftina ciocolata;

d.

Afisati pentru fiecare firma numarul de sortimente de ciocolata;

e.

Modificati pretul_bucata (scade cu 15%) la toate sortimentele firmei

"Primola";

f.

Stergeti din tabela toate sortimentele firmei "Poiana";

Rezolvare:

* from ciocolata where pret_buc20 order by firma_prod;

firma_prod from ciocolata where pret_buc=(select min(pret_buc) from

ciocolata);

count(sortiment) from ciocolata group by firma_prod;

ciocolata set pret_buc=pret_buc-15*pret_buc/100 where firma_prod

='primola';

from ciocolata where firma_prod='poiana'.

considera tabela LIBRARIE cu structura:

TITLU, AUTOR, PRET_BUC, EDITURA

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor

urmatoare;

toate cartile autorului "Mihai Eminescu" ordonate descrescator dupa pret;

costul total al tuturor cartilor de la editura "Donaris";

pentru fiecare autor numarul total al cartilor sale;

cartea (cartile) cea mai scumpa;

din tabela cartile cu pretul mai mare de 25 Ron si aparute la editura X (X de

la tastatura)

Rezolvare:

b. select * from librarie where autor='mihai eminescu' order by pret_buc desc;

c. select sum(pret_buc) from librarie where editura='donaris';

d. select autor, count(*) from librarie group by autor;

e. select * from librarie where pret_buc=(select max(pret_buc) from librarie);

f. delete from librarie where pret_buc20 and editura=:x;

considera tabela FARMACIE cu structura:

MEDICAMENT, DATA_EXP, PRET

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor

urmatoare.

medicamentele care mai au o luna pâna la expirare

pretul cu 5% la medicamentul aspirina;

medicamentul(medicamentele) cel mai ieftin;

pretul unui medicament dat de la tastatura;

din tabela medicamentele care au data de expirare astazi.

Rezolvare:

b. select * from farmacie where data_exp='11.03.2010';

c. update farmacie set pret=pret-5*pret/100 where medicament='aspirina';

d. select * from farmacie where pret=(select min(pret) from farmacie);

e. select pret from farmacie where medicament=:x;

f. delete from farmacie where data_exp='11.02.2010'.

considera

tabela CONCURS cu structura :

NUME, NOTA1, NOTA2, NOTA3, NOTA_FIN, DATA_NAST, JUDET

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor

urmatoare;

nota_fin (media aritmetica a celor 3 note) pentru fiecare candidat;

concurentii care au obtinut nota finala peste 7 in ordinea descrescatoare a

mediilor;

candidatul (candidatii) cu nota finala maxima;

mediile generale pe judete (media aritmetica a notelor finale pentru fiecare

judet);

concurentii care au media finala sub 5.

Rezolvare:

b. update concurs set nota_fin=(nota1+ nota2+ nota3)/3;

c. select nume, nota_fin, judet from concurs where nota_fin7 order by nota_fin desc;

d. select * from concurs where nota_fin=(select max(nota_fin) from concurs);

e. select judet, avg(nota_fin) from concurs group by judet;

f. delete from concurs where nota_fin5.

considera

tabela FIRME cu structura:

NUME, DATA_AP, ORAS, CAPITAL, NR_ANG

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor

urmatoare;

firmele care au cel putin 3 ani de la înfiintare ordonate alfabetic;

firmele din tabela grupate pe orase;

firma (firmele) cu cei mai multi angajati;

cu 10% capitalul social al firmei x preluata de la tastatura;

din tabela firmele care au capital social 1000 Ron.

Rezolvare:

b. select * from firme where (sysdate-data_ap)/365=3;

c. select nume, oras from firme group by oras;

d. select nume from firme where nr_ang=(select max(nr_ang) from firme);

e. update firme set capital= capital+10*capital/100 where nume=:x;

f. delete from firme where capital1000.

considera tabela CARTI cu structura:

COD_CARTE, DENUMIRE_CARTE, AUTOR, AN_APARITIE, GEN, PRET.

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor

urmatoare;

se afiseze cartile a caror pret nu depaseste 10 RON;

se diminueze cu 10% pretul cartilor al caror an de aparitie este introdus de la

tastatura;

se afiseze valoarea cartilor pentru fiecare autor a carui nume începe cu litera A;

se afiseze denumirea cartii si autorul pentru care pretul este maxim;

se afiseze cartea si autorul pe genuri literare.

Rezolvare:

b. select * from carti where pret10;

c. update carti set pret=pret-10*pret/100;

d. select * from carti where autor like 'a%';

e. select pret, autor from where pret=(select max(pret) from carti);

f. select gen from carti group by gen.

considera tabela TARI cu structura:

NUME, REGIUNE, SUPRAFATA, POPULATIE, PIB (produsul intern brut al unei

tari).

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor

urmatoare;

se afiseze tarile a caror populatie este mai mare de 20 milioane;

se afiseze tarile a caror regiune este introdusa de la tastatura;

tarile în ordine descrescatoare a valorii produsului intern brut;

se afiseze tarile cu suprafata minima;

se afiseze numarul tarilor pe regiuni.

Rezolvare:

b. select * from tari where populatie20 milioane;

c. select * from tari where regiune=:x;

d. select * from tari order by pib desc;

e. select * from tari where suprafata=(select min(suprafata) from tari);

f. select regiune, count(regiune) from tari group by regiune.

considera tabela SECTIE cu structura:

COD_SECTIE,DENUMIRE, NR_ANGAJATI, PRODUCTIE, CIFRA_A(cifra de

afaceri), PRODUCTIVITATE.

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor

urmatoare;

se afiseze sectiile cu numarul de angajati mai mare de 1000;

se completeze câmpul productivitate dupa formula cifra de afaceri/numar de

angajati;

sectiile cu productivitatea cea mai mare;

se stearga datele din baza de date pentru o sectie a carui cod este introdus de la

tastatura;

se ordoneze crescator dupa productie.

Rezolvare:

b. select * from sectie where nr_ang1000;

c. update sectie set productivitate=cifra_a/nr_ang;

d. select * from sectie where productivitate=(select max(productivitate) from sectie);

e. delete from sectie where cod_sectie=:x;

f. select * from sectie order by productivitate desc.

considera tabela CLADIRI cu structura:

DENUMIRE, LOCALITATE, VAL_INV (valoarea investitiei), AN_CON (anul

construirii), INDICE, VAL_ACT (valoarea actualizata).

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor

urmatoare;

se afiseze denumirea cladirilor a carei valoare actualizata este mai mica de 100.000

RON;

câmpul indice cu valoarea 1 pentru cladirile construite înainte de 1950 si cu

2 pentru cladirile construite dupa 1950;

numarul cladirilor construite în anul 1970;

câte cladiri au fost construite în fiecare localitate;

se afiseze valoarea investitiei si anul constructiei pentru o cladire a carei denumire

este introdusa de la tastatura.

Rezolvare:

b. select * from cladiri where val_act1000;

c. update cladiri set indice=2 where an_con=1950;

update cladiri set indice=1 where an_con1950;

d. select count(*) from cladiri where an_con=1970;

e. select loc, count(loc) from cladiri group by loc;

f. select val_inv, an_con from cladiri where loc=:x.

considera

tabela MATERIALE cu structura:

DEN_MAT, STOC_I (stoc ini ial), INTRARI , IESIRI, STOC_F (stoc final)

.

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

se completeze câmpul stoc final dupa formula: stoc initial+intrari-iesiri;

se afiseze materialele a caror stoc final este egal cu zero;

materialele în ordine crescatoare a stocurilor initiale;

materialele pentru care valoarea intrarii este cea mai mica.

din tabela materialele care au stocul final cuprins în intervalul a,b (a si b citite de

la tastatura);

Rezolvare:

b. update materiale set stoc_f=stoc_i+intrari-iesiri

c. select * from materiale where stoc_f=0;

d. select * from materiale order by stoc_f;

e. select * from materiale where intrari=(select min(intrari) from materiale)

f. delete from materiale where :astoc_f and stoc_f :b;

considera tabela SPITALE cu structura:

NUME_P, DIAGNOSTIC, MEDIC, ETAJ , SALON.

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor

urmatoare;

alfabetica a pacientilor;

câti pacienti sunt internati având diagnosticul"GRIPA"

numarul de pacienti a fiecarui medic;

se afiseze care este salonul cu numar maxim de pacienti.

din tabela înregistrarea corespunzatoare unui pacient introdus de la tastatura.

Rezolvare:

b. select * from spitale order by nume_p;

c. select count(*), nume_p from spitale where diagnostic='gripa';

d. select medic, count(medic) as „nr pacienti" from spitale group by medic;

e. select salon, count(*) from spitale group by salon;

f. delete from spitale where nume_p=:x.

considera tabela SPORTIVI cu structura:

NUME, VARSTA, SEX, GREUTATE, ÎNALTIME, SPORT .

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

se afiseze sportivii de la „haltere" a caror greutate este de 80 kg;

alfabetic sportivii ordonându-i dupa sporturile pe care le practica;

se afiseze câti sportivi practica "Fotbal";

se afiseze care este sportivul cu înaltimea cea mai mare care face handbal;

care este media de vârsta pentru baieti, respectiv pentru fete.

Rezolvare:

b. select * from sportivi where sport='haltere' and greutate=80;

c. select * from sportivi order by sport;

d. select count(*) from sportivi where sport='fotbal';

e. select nume from sportivi where inaltime=(select max(inaltime) from sportivi) and

sport='handbal';

f. select avg(varsta) from sportivi where sex='f';

select avg(varsta) from sportivi where sex='m';

considera tabela STATISTICA cu structura:

NUME, STUDII, OCUPATIA , DOMENIU, VENIT.

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor

urmatoare;

se afiseze câte persoane au venit peste 10 milioane;

se stearga din baza de date informatiile corespunzatoare studiilor introduse de la

tastatura;

care sunt persoanele cu venit maxim din domeniul educatiei;

se afiseze cât la suta reprezinta persoanele cu ocupatia "vânzator" din acest sondaj;

se determine venitul total pe domenii.

Rezolvare:

b. select count(*) from statistica where venit10;

c. delete from statistica where studii=:x;

d. select nume from statistica where venit=(select max(venit) from statistica where

domeniu ='educational') and domeniu='educational';

e. select (select count(*) from statistica where ocupatia='vanzator')/(select count(*) from

statistica) * 100 from dual.

f. select sum(venit), domeniu from statistica group by domeniu.

considera tabela ABONATI cu structura:

NUME, CNP, MIN_INCLUSE, MIN_UTILIZATE, VALOARE, ACHITAT,

RETEA.

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor

urmatoare;

se afiseze pentru fiecare abonat valoarea facturii pe care trebuie sa o achite

cunoscând ca minutele suplimentare costa cu 10% mai mult decât minutele incluse si ca tariful

unui minut inclus este de 0,25 lei;

abonatii care sunt restanti;

se afiseze abonatii cu valoarea facturata cea mai mare;

abonatul a carui CNP s-a introdus de la tastatura sa se indice daca a achitat;

se afiseze valoarea obtinuta din încasari pentru fiecare retea.

Rezolvare:

b. alter table abonati add factura number

update abonati set factura=0.25*min_incluse where (min_utilizate-min_incluse)=0;

update abonati set factura=0.25*min_incluse+0.275*(min_utilizate-min_incluse)

where (min_utilizate-min_incluse)0;

c. select * from abonati where achitat=0;

d. select nume from abonati where factura=(select max(factura) from abonati);

e. select achitat from abonati where cnp=:x;

f. select sum(factura), retea from abonati group by retea.

considera tabela STUDENTI cu structura:

NUME, CNP, AN, MEDIE, BURSA.

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor

urmatoare;

se afiseze câti studenti primesc bursa din anul I;

studentii care au bursa de merit(media peste 9,50 inclusiv);

numarul studentilor bursieri din fiecare an;

care este valoarea maxima a bursei dupa marirea cu 20%

se stearga studentii care au pierdut bursa(media este sub 8).

Rezolvare:

b. select count(*) from studenti where bursa 0 and an=1;

c. select nume from studenti where medie=9.5;

d. select count(*), an, from studenti where bursa 0 group by an;

e. update studenti set bursa=bursa+20*bursa/100

select bursa from studenti where bursa=(select max(bursa) from studenti);

f. delete from studenti where medie=8.

considera tabela ELEVI cu structura:

CODELEV, NUME, PRENUME, CLASA, MEDIA, CODSEFCLASA

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

se afiseze în ordinea alfabetica primii 3 elevi din clasa C (C citit de la tastatura);

c.Câti elevi al caror nume se termina cu litera 'U' sunt în tabela?

fiecare clasa din tabela sa se calculeze media pe clasa; rezultatele se vor afisa în

formatul "Media clasei … este …."; Coloana rezultata va avea aliasul „Medii";

se afiseze elevii cu cea mai mare medie. Se vor afisa primele trei linii (daca exista);

se afiseze elevii si sefii lor de clasa în formatul: "Seful de clasa al elevului ….. este …..";

considera tabela PARIURI cu structura:

CODPARIU, PERSOANA, CAL, SUMA, DATA

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

se afiseze toate persoanele care au pariat în trimestrul 1. Informatiile se vor afisa în

formatul: "Persoana … a pariat în data de …. suma de …. pe calul …";

de la pariul cu codul X si-a triplat suma pariata. Actualizati tabela.

d.Câte persoane au pariat în luna curenta pe calul cu numele C? (C dat de la tastatura);

cu numele X s-a îmbolnavit. Sa se stearga toate pariurile din luna curenta pe acest cal;

se afiseze numele persoanei/persoanelor cu cea mai mare suma pariata la un pariu;

considera tabelele ECHIPE si MECIURI cu structurile:

ECHIPE (ID, NUME, ORAS)

MECIURI (ID, ID_ECHIPA1, ID_ECHIPA2, GOL1, GOL2, DATA)

se creeze tabelele si sa se introduca câte 6 articole care sa corespunda cerintelor urmatoare;

în ordine alfabetica toate echipele cu numele începând cu litera S; Prima litera din

numele echipei va fi litera mare, restul vor fi litere mici;

din data D (citita de la tastatura) au fost amânate cu 7 zile. Actualizati tabela;

o noua echipa cu id-ul 1001, numele "Speranta" care sa fie acelasi oras cu echipa

cu numele X (X citit de la tastatura);

din tabela meciurile disputate în zilele de joi;

toate meciurile în formatul:"NumeEchipa1 –NumeEchipa2: Gol1 – Gol2";

Rezolvare:

b. update echipe set nume=initcap(nume);

select nume from echipe where nume like ‚S%' order by nume;

c. update meciuri set data=data+7 where data=:d;

d. insert into echipe (id, nume, oras) value (1001, ‚speranta', (select oras from echipe where

nume=:x));

e. delete from meciuri where to_char(data, ‚day')='miercuri';

f. select as „nume echipa 1", (select from echipe p,meciuri f where

=_echipa2) as „nume echipa 1", 1, 2 from echipe p, meciuri f where

=_echipa1;

considera tabelele ANGAJATI si DEPARTAMENTE cu structurile:

ANGAJATI (ID, NUME, PRENUME, DATA_ANGAJARE, SALARIU, ID_DEP)

DEPARTAMENTE (ID, DENUMIRE)

se creeze tabelele si sa se introduca câte 6 articole care sa corespunda cerintelor urmatoare;

persoanelor angajate de cel putin 10 luni se mareste cu 10%. Actualizati tabela

ANGAJATI;

se adauge un nou angajat care sa lucreze în acelasi departament cu angajatul cu numele Y

(Y citi de la tastatura);

cu denumirea D (D citit de la tastatura) s-a desfiintat. Actualizati cele doua

tabele, stergând departamentul si angajatii care lucreaza în acest departament;

se afiseze toti angajatii din departamentul cu denumirea X (X citit de la tastatura);

Informatiile vor fi afisate în formatul "Angajatul ….. lucreaza în departamentul ….".

se afiseze salariul maxim pentru fiecare departament. Rezultatele vor fi afisate în formatul

"Salariul maxim din departamentul ….. este …..". Coloana rezultata va avea aliasul

SALARII.

Rezolvare:

b. UPDATE ANGAJATI1 SET SALARIU=(SALARIU +(10/100)*SALARIU) WHERE

((SYSDATE-DATA_A)310)

c. INSERT INTO ANGAJATI1(ID, NUME, PRENUME, DATA_A, ID_DEP, SALARIU)

VALUES ('5', 'MHH', 'WXX', '04-06-2008', (SELECT ID_DEP FROM ANGAJATI1 WHERE

NUME=:Y), '1111')

d. delete from angajati where id_dep=:x

delete from departamente where id=34;

e. select nume as "angajatul lucreaza la ", as "departamentul.." from angajati1 a,

departamente d where _dep=(select id from departamente where denumire=:x) and

_dep=;

f. select ('salariul maxim din departamentul' ||id_dep|| 'este' || max(salariu)) as salarii from

angajati group by id_dep, salariu

considera tabelele: TURISTI si EXCURSII cu structurile:

TURISTI (COD, NUME, SEX, COD_EXC)

EXCURSII (COD , DESTINATIE , DATA_INCEPUT, DATA_SFARSIT, PRET)

se creeze tabelele si sa se introduca câte 6 articole care sa corespunda cerintelor urmatoare;

se afiseze destinatiile în ordine alfabetica. Fiecare destinatie va fi afisata o singura data;

care vor avea loc la Predeal în lunile de iarna s-au ieftinit cu 100 lei. Actualizati

tabela EXCURSII;

din tabela turistul cu numele X (X citit de la tastatura);

e.Câti turisti au ales destinatia 'Vatra Dornei'?

turistii care au participat la excursii cu durata mai mare de 7 zile. Informatiile vor fi

afisate în formatul: „Turistul …. a participat la excursia ….în perioada …. - ….".

Rezolvare:

b. select * from excursii order by destinatie

c.

d. delete from turisti where nume=:x;

e. select , from turisti t, excursii26 e where =;

f.

considera tabelele NUMERE1 si NUMERE2 cu structurile:

NUMERE1 ( CIFRA )

NUMERE2 ( CIFRA )

se completeze fiecare din cele doua tabele cu cifrele de la 1 la 5;

se afiseze cifrele din a doua tabela folosind scrierea cu cifre romane;

se afiseze tabla înmultirii pâna la 5 în formatul "cifra x cifra = rezultat"; se vor afisa

primele 20 de linii;

se afiseze tabla înmultirii cu X (X6 cifra nenula citita de la tastatura);

se afiseze câtul si restul împar irii cifrei X la toate celelalte cifre în formatul "cifra / cifra =

.

(cat, rest)" X (X6 cifra nenula citita de la tastatura);

din prima tabela se vor inversa: 5,4,3,2,1. Actualizati tabela.

considera tabela PACHETE cu structura

EXPEDITOR, DESTINATAR, DATA_EXPEDIERE, CATEGORIA, GREUTATE

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

se afiseze in ordine alfabetica a destinatarului pachetele care nu au completat expeditorul;

se calculeze media aritmetica a greutatilor pachetelor din tabela;

completeaza cu NECUNOSCUT toti expeditorii nespecificati si cu data de astazi toate

datele de expediere necompletate;

se stearga toate pachetele expediate anul trecut care au greutatea mai mica decât X (citit

de la tastatura);

este destinatarul care a primit cele mai multe pachete?

Rezolvare:

b. select * from pachete where expeditor=' ' order by destinatar;

c. select avg(greutate) from pachete;

d. update pachete set expeditor='necunoscut' where expeditor='

';

update pachete set data_ex=nvl(data_ex, sysdate);

e. delete from pachete where data_ex'31-12-2008' and data_ex'01-01-2010' and

greutate:x;

f. select destinatar, count(*) from pachete group by destinatar having count(*)=(select

max(count(*) from pachete group by destinatar);

considera tabela PRODUSE cu structura:

ID, DENUMIRE, CATEGORIE, DATA_EXP, PRET, CANTITATE

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

se afiseze produsele care expira astazi; se vor afisa doar primele 5 linii;

este valoarea totala a produselor din tabela? Afisati în formatul "Valoarea totala

este….";

care expira mâine se ieftinesc cu 50%. Actualizati tabela;

se adauge un nou produs care sa fie în aceeasi categorie cu produsul cu id-ul egal cu 4.

se afiseze categoria / categoriile care contine cele mai multe produse;

Rezolvare:

b. select denumire, rownum from produse where data_exp='22-03-2010' and rownum=5;

c. select „valoarea totala este" sum(pret*cantitate) from produse;

d. update produse set pret=0.5* pret where data_exp='23-03-2010';

e. insert into produse (id, denumire, categorie, data_exp, cantitate) values (20, 'sapun', select

categorie from produse where id='4', ‚24-03-2010', 3, z)

f. select categorie, count(*) from produse group by categorie having count(*)=(select

max(count(*)) from produse group by categorie)

considera tabela FOTBALI STI cu structura:

NUME, ECHIPA, POST, NRMECIURI, GOLURIMARCATE

a.

Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor

urmatoare;

b.

Afisati toti jucatorii echipei Ceahlaul;

c.

Afisati jucatorii grupati pe echipe, iar în cadrul echipelor pe posturi

d.

Mijlocasul Ronaldo s-a transferat la echipa Cimentul;

e.

Stergeti din tabela un jucator cu numele citit de la tastatura;

f.

Afisati atacantul cu cel mai mare procent de reusita (numarul de goluri marcate/

numarul de meciuri jucate);

Rezolvare:

b. select * from fotbalisti where echipa='Ceahlaul';

c. select nume, echipa, post from fotbalisti order by echipa, post, nume;

d. update fotbalisti set echipa='Ceahlaul' where numr='Ronaldo';

e. delete from fotbalisti where nume=:x;

f. select * from fotbalisti where goluri=(select max (nrmeciuri/goluri) from fotbalisti);

considera tabela CONCURENTI cu structura :

COD, NUME, TARA, PUNCTAJ

a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

clasamentului final în ordine descrescatoare a punctajelor si la punctaje egale

alfabetic dupa nume;

-se codul unui concurent si un nou punctaj al acestuia actualizati informatiile din

tabela;

concurentilor cu punctaje maxime;

de concurenti din fiecare tara;

se afiseze tara /tarile cu cea mai mare medie a punctajelor;

Rezolvare:

b. select * from concurenti order by punctaj desc, nume;

c. update concurentii set punctaj='56' where cod='5';

d. select * from concurenti where punctaj=(select max(punctaj) from concurenti);

e. select count(nume) from concurenti group by tara;

f. select tara, avg(punctaj) from concurenti group by tara having avg(punctaj)(select

avg(punctaj) from concurenti);

considera tabela PACIENTI cu structura

COD, NUME, DIAGNOSTIC, ADRESA, NR_ZILE_ SPITALIZARE

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

alfabetica a pacientilor;

din tabela înregistrarea corespunzatoare unui cod introdus de la tastatura;

pacientii cu un numar maxim de zile de spitalizare;

de pacienti pentru fiecare diagnostic;

un diagnostic dat mariti numarul de zile de spitalizare cu o valoare data de la tastatura.

Rezolvare:

b. select * from pacienti order by nume;

c. delete from pacienti where cod=:x;

d. select * from pacienti where nr_zile_spitalizare=(select max(nr_zile_spitalizare) from

pacienti);

e. select count(nume) from pacienti group by diagnostic;

f. update pacienti set nr_zile_spitalizare=nr_zile_spitalizare + :z where diagnostic=:v;

considera tabela ANGENTII cu structura

COD, DENUMIRE, LOCALITATE, NR_ANGAJATI

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

alfabetica a agentiilor;

-se codul unei agentii si un nou numar de angajati actualizati datele corespunzatoare

din tabela;

numarul angajatilor de la o agentie al carei cod se citeste de la tastatura

diminuându-l cu 10 %;

de agentii pe localitati;

se afiseze localitatile care au numar numar maxim de angajati;

Rezolvare:

b. select * from agentii order by denumire;

c. update agentii set nr_ang=:z where cod=:v;

d. update agentii set nr_ang=(nr_ang-(nr_ang*10)/100) where cod=:v;

e. select count(*) from agentii group by localitate;

f. select localitate from agentii where nr_ang=(select max(nr_ang) from agentii).

considera tabela SPECII cu structura

COD_SPECIE, NUME, ZONA, NR_EXEMPLARE

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

alfabetica a speciilor;

din tabela un articol de cod introdus de la tastatura;

numarul total de specii pe zone;

lista alfabetica a zonelor existente în tabela ;

speciilor cu numar minim de exemplare.

Rezolvare:

b. select * from specii order by nume;

c. delete from specii where cod_specie=:x;

d. select count(*) from specii group by zona;

e. select * from specii order by zona;

f. select * from specii where nr_exemplare=(select min(nr_exemplare) from specii).

considera tabela BIBLIOTECA cu structura

COD, TITLU, AUTOR, NR_EXEMPLARE

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

se afiseze numarul total de exemplare din tabela;

alfabetica a titlurilor cu numar maxim de exemplare;

fiecare autor afisati numarul total de exemplare;

din tabela toate articolele unui autor introdus de la tastatura;

un cod introdus de la tastatura actualizati tabela marind numarul de exemplare cu 10.

Rezolvare:

b. select count(*) from biblioteca;

c. select * from biblioteca where nr_exemplare=(select max(nr_exemplare) from biblioteca)

order by titlu;

d. select count(nr_exemplare) from biblioteca group by autor;

e. delete from biblioteca where autor=:x;

f. update biblioteca set nr_exemplare=nr_exemplare+10 where cod=:x;

considera tabela CREDITE cu structura

COD, NUME, DATA, PERIOADA, SUMA.

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

persoanelor pentru care perioada de creditare s-a încheiat;

persoanelor care au credite cu sume maxime;

suma totala a creditelor pe fiecare an;

un cod introdus de la tastatura mariti perioada de creditare cu 1 luna.

din tabela înregistrarea corespunzatoare unui cod citit de la tastatura.

Rezolvare:

b. select * from credite where data+perioadasysdate;

c. select nume from credite where suma=(select max(suma) from credite) order by nume;

d. select data, sum(nume) from credite group by data;

e. update credite set perioada=(perioada+30) where cod:x;

f. delete from credite where cod=:x;

considera tabela REVISTE cu structura

COD, NUME, DATA_LANSARE, PRET, NR_EXEMPLARE

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

publicatiilor lansate în anul 2009;

de publicatii cu numar maxim de exemplare;

numarul total de publicatii pe an de aparitie;

publicatiilor alfabetic si pe an de aparitie;

un cod introdus de la tastatura actualizati tabela marind numarul de exemplare cu

100.

Rezolvare:

b. select * from reviste where(data_lansare='01-01-2009' and data_lansare='31-12-2009');

c. select count(*) from reviste where nr_exemplare=(select max(nr_exemplare) from reviste);

d. select count(*) to_char (data_lansare, 'yyyy') as „anul" from reviste group by

to_char( data_lansare, 'yyyy');

e. select * from reviste order by nume, to_char(data_lansare, 'yyyy');

f. update reviste set nr_exemplare=nr_exemplare+100 where cod=:x;

considera tabela ABONAMENTE cu structura

COD, LOC_PLECARE, LOC_SOSIRE, DATA_PLECARE, PRET

g.

Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor

urmatoare;

h.

lista curselor cu plecare din Bicaz;

i.

localitatea de plecare cu numar maxim de abonamente;

j.

numarul abonamentelor cu sosire în Roman;

k.

lista curselor sortate cronologic;

l.

pentru un cod introdus de la tastatura actualizati articolul corespunzator marind

pretul cu 5%.

Rezolvare:

b. select * from abonamente where loc_plecare='bicaz';

c. select max(count(loc_plecare)) from abonamente group by loc_plecare;

d. select loc_sosire, count(loc_sosire) from abonamente where loc_sosire='roman'

group by loc_sosire;

e. select * from abonamente order by data_plecare;

f. update abonamente set pret=pret +(0,05 * pret) where cod=:x;

considera tabela ATESTAT cu structura:

NUME, TEMA, COORDONATOR, AN, NOTA

m.

Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor

urmatoare;

n.

Afi a i pe ecran toate atestatele a caror tema contine cuvântul"grafuri";

..

o.

Afi a i temele de atestat din anul 2010, grupate dupa coordonator;

..

p.

Afi a i atestatele coordonate de profesorul X care au obtinut cea mai mare nota (X

..

se citeste de la tastatura);

q.

Afisati numarul de atestate coordonate de fiecare profesor;

r. Eliminati din tabela atestatele sustinute în anul 2005 care au obtinut nota sub 7;

Rezolvare:

b. select * from atestat where tema='grafuri';

c. select * from atestat where an='2010' group by coordonator;

d. select * from atestat where nota=(select max(nota) from atestat) and coordonator=:x;

e. select count(*) from atestat group by coordonator;

f. delete from atestat where an='2005' and nota='7';

considera tabela AGENDA cu structura:

ID_AGENDA, NUME, PRENUME, DATA_NASTERE, TELEFON, EMAIL, ADRESA,

NR_COPII.

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

se afiseze persoanele care au un singur copil si locuiesc în orasul X introdus de la

tastatura.

persoanelor care sunt nascute în luna noiembrie.

se afiseze lista persoanelor care locuiesc în judetul Neamt (prefix 0233)si nu au adresa

de email.

persoanele care au acelasi numar de copii cu persoana cu numele X (X citit de la

tastatura);

persoanelor din agenda pe orase si pentru acelasi oras alfabetic dupa nume.

Rezolvare:

b. select * from agenda where nr_copii='1' and adresa=:x;

c. select * from agenda where data_nastere=

d. select * from agenda where adresa='neamt' and email is NULL;

e. select * from agenda where nr_copii=(select nr_copii from agenda where nume=:x)

f. select * from agenda group by adresa,nume;

considera tabela PAPETARIE cu structura:

ID_PRODUS, NUME_PRODUS, PRET, NR_EXEMPLARE, FURNIZOR.

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

este produsul care se gaseste în stoc în cantitate maxima.

furnizorilor de produse din Papetarie.

se stearga produsul / produsele cu pret minim;

din baza de date a produselor furnizorului introdus de la tastatura.

este numarul produselor achizitionate de la fiecare furnizor.

Rezolvare:

b. select * from papetarie where nr_exemplare=(select max(nr_exemplare) from papetarie);

c. select furnizor from papetarie;

d. delete from papetarie where pret=(select min(pret) from papetarie);

e. delete from papetarie where furnizor=:X;

f. select count(nume_produs) from papetarie group by furnizor;

considera tabela CLASE cu structura:

CNP, NUME, PRENUME, DATA_NASTERE, LOCALITATE, EMAIL, MEDIE.

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

se afiseze elevii care nu locuiesc într-un oras introdus de la tastatura;

sunt elevii care au ziua de nastere în luna curenta;

se afiseze numarul de elevi din fiecare localitate;

se afiseze elevii care au media mai mare decât media maxima a elevilor dintr-o localitate

data de la tastatura;

elevilor în ordinea descrescatoare a mediilor si la medii egale alphabetic

Rezolvare:

b. select * from clase where localitate:x;

c. select nume from clase where to_char(data_n, ‚month')='septembrie';

d. select count(*) from clase group by localitate;

e. select nume from clase where media(select max(medie) from clase where localitate=:x);

f. select * from clase order by medie desc, nume;

considera tabela IMOBILIARA cu structura:

ID_LOC, NR_CAMERE, SUPRAFATA, TIP, ETAJ, PRET.

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

se afiseze structura apartamentelor situate la etajul 1.

se afiseze care sunt tipurile de apartamente din tabela.

se afiseze apartamentele decomandate care au suprafata cuprinsa între doua valori

introduse de la tastatura.

se stearga din tabela articolele care au pretul minim si 2 camere.

se afiseze ofertele de apartamente în ordinea descrescatoare a preturilor.

Rezolvare:

b. select nr_camere, suprafata, tip, pret from imobiliara where etaj='1';

c. select * from imobiliara group by tip;

d. select * from imobiliara where suprafata:x and suprafata:z;

e. delete from imobiliara where pret=(select min(pret) from imobiliara) and nr_camere='2';

f. select * from imobiliara order by pret desc;

considera tabela FARMACIE cu structura:

ID_PRODUS, PRET, STOC, DATA_EXPIRARE, FURNIZOR.

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

cantitatea existenta în stoc pentru un medicament introdus de la tastatura.

sunt produsele în cantitate maxima în stoc.

produselor pentru care termenul de valabilitate expira peste 2 luni.

de produse în stoc pe furnizori.

se afiseze produsele alfabetic si pentru acelasi produs crescator în functie de pret.

Rezolvare:

b. select stoc from farmacie where id_produs=:x;

c. select * from farmacie where stoc=(select max(stoc) from farmacie);

d. select * from farmacie where data_expirare '30-04-2010' and data_expirare'01-062010';

e. select sum(stoc), furnizori from farmacie group by furnizor;

f. select * from farmacie order by pret;

considera tabela CARTI cu structura:

AUTOR, TITLU, EDITURA, NR_EXEMPLARE, AN_ACHIZITIE.

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

sunt editurile la care au fost publicate cartile achizitionate.

si titlul lucrarilor cu numar maxim de exemplare în tabela.

sunt numarul de titluri publicate de fiecare editura.

lucrarilor achizitionate între 1990 si 2009.

cartilor alfabetic pe autori si pentru acelasi autor descrescator dupa numarul de

exemplare.

Rezolvare:

b. select editura from carti group by editura;

c. select autor, titlu, from carti where nr_exemplare=(select max(nr_exemplare) from carti);

d. select count(editura), editura from carti group by editura;

e. select autor, titlu from carti where an='1990' and an='2009';

f. select titlu from carti order by autor desc, nr_exemplare;

considera tabela CLIENTI cu structura:

ID_CLIENT, NUME, PRENUME, TELEFON, EMAIL, ADRESA, ORAS.

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

sunt orasele în care locuiesc clientii din tabela.

este numarul clientilor dintr-un oras dat de la tastatura.

se afiseze numele si prenumele clientilor care au prefixul telefonic '0233'.

sunt clientii care nu au adresa de email în tabela.

clientilor pe orase si în acelasi oras alfabetic dupa nume.

Rezolvare:

b. select oras from clienti:

c. select count(nume) from clienti where oras=:x;

d. select nume, prenume from clienti where telefon like ‚0233%';

e. select * from clienti where email is NULL;

f. select * from clienti order by oras, nume;

considera tabela LOCATARI cu structura

NUME, PRENUME, APARTAMENT, RESTANTA, TAXA_LIFT

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

a i pe ecran locatarii cu restante de plata;

..

c.Înlocui i in baza de date datele locatarului de la apartamentul 11 cu datele noului proprietar;

.

i valoarea totala a restantelor de plata

.

de la apartamentul X are aceeasi restanta cu locatarul de la apartamentul Y.

Actualizati tabela; (X, Y citite de la tastatura)

a i locatarii primelor 5 apartamente care nu platesc taxa de lift;

..

Rezolvare:

b. select * from locatari where restanta is not null;

c. update locatari set nume='ion', prenume='ciucu' , restanta='7', taxa_lift='8' where

apartament='11';

d. select sum(restanta) from locatari

locatari set restanta=(select rest from locatari where n=:x) where nume=:y;

f. select * from locatari where taxa is null and rownum6;

considera tabela LABORATOR cu structura

NUMAR_STATIE, PROCESOR, FRECVENTA, MEMORIE, DVD, VALOARE

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

a i pe ecran calculatoarele dotate cu procesor Intel cu frecventa mai mare de 1000 Mhz

..

(se va afi a numarul sta iei, modelul procesorului si frecventa)

..

c..terge i sta iile cu memoria RAM mai mica sau egala cu 128 MB.

.

sta ii sunt prevazute cu unitate de DVD?

.

i valoarea totala de inventar a sta iilor.

..

numarul statiilor pentru fiecare tip de procesor.

Rezolvare:

b. select numar_statie, procesor, frecventa from laborator where procesor='Intel' and

frecventa1000

c. delete from laborator where memorie='128';

d. select count(*) from laborator where dvd is not null;

e. select sum(valoare) from laborator ;

f. select count(*) from laborator group by procesor;

considera tabela MUNCITORI cu structura

NUME, COD_ATELIER, NR_PIESE

se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare;

se afiseze numarul atelierelor din tabela;

se afiseze codul atelierului din tabela cu cei mai multi muncitori;

cu numele X (dat de la tastatura) se pensioneaza. Eliminati-l din tabela;

se afiseze numarul de piese produse de fiecare atelier;

se afiseze atelierul / atelierele cu cele mai multe piese produse;

Rezolvare:

b. select count(*) from muncitori

c. select cod_atelier,count(*) from muncitori group by cod_atelier having count(*)

=(select max(count(*)) from muncitori

d) delete from muncitori where nume=:X

e) select sum(nr_piese),cod_atelier from muncitori group by cod_atelier

f) select cod_atelier from muncitori group by cod_atelier having sum(nr_piese)=(select

max(sum(nr_piese)) from muncitori group by cod_atelier)

considera tabela TESTE cu structura:

DENUMIRE, DISCIPLINA, TIP, CLASA, PROFIL, DURATA

Tipul poate fi: clasic, grila, combinat.

. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor

urmatoare;

a Afi a i pe ecran denumirile testelor de la disciplina Informatica, de tip grila care

..

se pot da elevilor de clasa a IX-a, indiferent de profil;

b .terge i din baza de date testele cu durata mai mare de 60 minute.

.

c Afi a i testele de la profilul Matematica-informatica, grupate alfabetic pe

..

discipline si descrescator dupa durata testului.

d Modifica i durata testului "Componentele calculatorului" la 40 min si tipul

.

acestuia in test grila.

e Afisati disciplina / disciplinele cu cele mai multe teste.

b) select denumire from teste where disciplina='informatica' and tip='grila' and

clasa='a9a'

c) delete from teste where durata'80'

d) update teste set durata='40',tip='grila' where denumire='componentele calculatorului'

e) select disciplina,count(*) from teste group by disciplina having count(*)=(select max(count(*))

from teste group by disciplina)


	2. Chapter 2

1. Se citesc de la tastatura n numere naturale, cu cel mult 9 cifre fiecare. Scrieti un program care pentru o cifra k citita de la tastatura, afiseaza pe ecran cate numere prime in scrierea carora apare cifra k, se gasesc in sirul dat.

Exemplu: pentru n=4 , cifra k=2 si valorile citite 23, 603, 122, 27 se obtine numarul nr = 1, care corespunde valorii 23 .

#include iostream

#include math.h

using namespace std;

int prim(long int x){

if(x=1)

return 0;

for(long d=2;d=sqrt(x);d++)

if(x%d==0)

return 0;

return 1;

}

int test(long x,int k){

while(x0){

if(k==x%10)

return 1;

x/=10;/x=x/10;

}

return 0;

}

int main() {

long x;

int k,nr,n,i;

cinkn; nr=0;

for(i=1;i=n;i++){

cinx;

if(prim(x) && test(x,k))

nr++;

}

coutnr;

return 0;

}

2. Se citeste de la tastatura un numar natural n cu cel mult noua cifre. Scrieti un program care verifica daca exista un numar natural k cu proprietatea ca n=1*2*3*…*k. Daca exista un astfel de numar, programul va afisa mesajul "Da" si valoarea k , altfel va afisa mesajul "Nu".(intensiv: valoarea se determina utilizand o metoda eficienta din punct de vedere al timpului de executie)

#include iostream

using namespace std;

int main() {

long n,f=1;

cinn;

int k=0;

do {

k++;

f*=k;

}while(fn);

if(f==n)

cout"Da "k;

else

cout"Nu";

return 0;

}

3. In fisierul se gasesc pe prima linie maximum 1000 de numere intregi despartite printr-un spatiu. Scrieti un program care sa determine valoarea maxima si valoarea minima, impreuna cu numarul de aparitii al maximului, respectiv al minimului.(intensiv: folositi o metoda eficienta din punct de vedere al memoriei si al numarului de operatii efectuate si afisati pe ecran valorile obtinute).

Exemplu:continutul fisierului este : 24 3 89 24 1 3 1 1 89, atunci se vor afisa rezultatele:

min = 1 nr_aparitii = 3

max = 89 nr_aparitii = 2

#include iostream

#include fstream

using namespace std;

int main() {

ifstream f("");

/fstream f("",ios::in);

int x,max,min,fmax,fmin;

fx;

max=min=x;

fmax=fmin=1;

while(fx) {

if(xmin) {

min=x;

fmin=1;

}

else

if(min==x)

fmin++;

if(xmax) {

max=x;

fmax=1;

}

else

if(max==x)

fmax++;

}

();

cout"min = "min" nr_aparitii = "fminendl;

cout"max = "max" nr_aparitii = "fmax;

return 0;

}

contine pe primul rand valoarea n ( 2=n=1.000.000 ), iar pe a doua linie se gasesc n numere intregi formate din cel mult 9 cifre si despartite prin spatiu. Stiind ca fisierul contine cel putin doua numere distincte printre cele n de pe a doua linie, scrieti un program care sa scrie in fisierul pe o singura linie si separate printr-un spatiu, in ordine descrescatoate, cele mai mari doua valori distincte din fisierul de intrare. (intensiv :alegeti o metoda eficienta de rezolvare atat ca timp de executare, cat si ca gestionare a memoriei)

Exemplu :

10

-8 14 8 14 15 9 -7 1 4 10 15 14

#include iostream

#include fstream

using namespace std;

int main() {

long n,x,maxM,maxm;

ifstream f("");

fnx; maxM=maxm=x;

while(n1) {

fx;

if(xmaxM) {maxm=maxM; maxM=x;}

else/x=maxM

if(maxmx && xmaxM)

maxm=x;

n-;

}

();

ofstream g("");

gmaxM' 'maxm;

();

return 0;

}

5. Fisierul text contine pe prima linie un numar natural n (0=n=5000), iar pe a doua linie n numere naturale de cel mult 9 cifre fiecare, separate prin cate un spatiu. Sa se scrie un program care citeste n, apoi cele n numere naturale din fisierul si scrie in fisierul , pe cate o linie fiecare, numerele de pe a doua linie a fisierului care sunt palindroame cu exact patru cifre (un numar este palindrom daca este egal cu oglinditul sau).

De exemplu daca fisierul are urmatorul continut :

5

1441 5 14 2552 78

atunci fisierul va contine :

1441

2552

#include iostream

#include fstream

using namespace std;

int main() {

int n,i;

long nr;

ifstream f("");

ofstream g("");

fn;

for(i=1;i=n;i++){

fnr;

if(1000=nr ();

}

citeste de la tastaturp n, si apoi n perechi de cate doua numere intregi a si b cu ( a 0 b) reprezentand capetele intervalului[a, b]. Afisati pe ecran , daca exista, capetele intervalului de intersecsie al celor n intervale citite. in cazul in care nu exista intervalul de intersecsie se afiseaza 0.

De exemplu, pentru n=3 si perechile [-1,20], [-4,9], [-7, 12] , obtinem solutia x= -1 si y= 9.

#include iostream

using namespace std;

int main() {

int n, a, b, amax , bmin; /amax este maximul de valori negative a iar bmin este minimul de valori pozitive b

cinn;

cinamaxbmin; /valorile maxime/minime sunt intializate cu valori din sir

for(int i=1;i=n-1;i++){

cinab;

if(aamax) amax=a;

if(bbmin) bmin=b;

}

coutamax" "bmin;

}

7. Se citesc de la tastatura n numere naturale, cu cel mult 9 cifre fiecare. Scrieti un program care afiseaza cifra care apare de cele mai multe ori in numerele citite. Daca exista mai multe astfel de cifre se vor afisa toate.

Exemplu:Pentru n=4 si valorile 23, 431, 154, 452 se afiseaza 3 pentru ca cifra 4 apare de 3 ori in numerele citite.

#include iostream

using namespace std;

int v[10];

int main() {

int n, i;

long val;

cinn;

for (i=1;i=n;i++) {

cin val;

while (val0) {

v[val%10]++; val/=10;

}

}

int max=v[0];

for (i=1;i=9;i++)

if (maxv[i]) max=v[i]; / am calculat frecventa max a unei cifre;

for (i=0;i=9;i++)

if (v[i]==max)

couti" ";

return 0;

}

8. Se citeste de la tastatura un numar natural n cu maxim cinci cifre. Afisati cel mai apropiat numar fata de n care are aceeasi suma a cifrelor.

#include iostream

#include fstream

using namespace std;

int sc(long x) {

int s=0;

while(x) {

s+=x%10; x/=10;

}

return s;

}

int main() {

long x;

ifstream f("");

fx;

();

int s=sc(x);

long st=x, dr=x;

do {

st-;

} while(sc(st)!=s);

do {

dr++;

} while(sc(dr)!=s);

ofstream g("");

if(x-stdr-x)

gst;

else

if(x-stdr-x)

gdr;

else

gst' 'dr;

return 0;

}

citesc n numere naturale. Sa se ordoneze numerele crescator dupa numarul de divizori. (intensiv: numarul de divizori se va determina utilizand o metoda eficienta din punct de vedere al timpului de execusie)

Exemplu: n=4, numerele 12,4,6,13s 13,4,6,12 .

#include iostream

#include fstream

using namespace std;

int nrd(long x) {

int nrdiv=0;

for(long int d=1;d=x/2;d++)

if(x%d==0)

nrdiv++;

return nrdiv+1;}

int main() {

long x[100];

int n,i;

ifstream f("");

fn;

for(i=0;i=n-1;i++)

fx[i];

();

int sortat=0;

while(!sortat) {

sortat=1;

for(i=0;i=n-2;i++)

if(nrd(x[i])nrd(x[i+1])) {

long aux=x[i];

x[i]=x[i+1];

x[i+1]=aux;

sortat=0;}}

ofstream g("");

for(i=0;i=n-1;i++)

gx[i]' ';

();

return 0;

}

10. Se citeste n numar natural (n32000) si apoi se introduc pe rand n numere intregi. Sa se afiseze numerele prime si sa se calculeze media lor aritmetica.

#include iostream

#include fstream

#include math.h

using namespace std;

int prim(long x) {

if(x=1)

return 0;

for(long d=2;d=sqrt(x);d++)

if(x%d==0)

return 0;

return 1;}

int main() {

long x;

float s=0;

int nrp=0,n,i;

ifstream f("");

ofstream g("");

fn;

for(i=1;i=n;i++) {

fx;

if(prim(x)) {

gx' ';

s+=x;

nrp++;}}

if(nrp)

gs/nrp; (); ();

return 0;}

11. Se citeste de la tastatura un numar natural n cu cel mult 9 cifre. Sa se afiseze cel mai mare si cel mai mic numar care se poate forma cu cifrele distincte ale numarului.

#include iostream

#include fstream

using namespace std;

int fr[10];

int main() {

long n;

int i;

ifstream f("");

fn;

();

ofstream g("");

if(n==0)

g0endl0;

else

{

while(n) {

fr[n%10]++;

n/=10;

}

for(i=9;i=0;i-)

if(fr[i])

gi;

gendl;

if(!fr[0])

for(i=0;i=9;i++)

{if(fr[i])

gi;}

else

{

int primnenul=0;

for(i=1;i=9;i++)

if(fr[i])

{

if(primnenul==0)

gi0;

else

gi;

primnenul=1;

}}

}();();

return 0;}

12. Se citeste din fisierul un numar natural n. Sa se verifice daca este putere a lui 2 si sa se calculeze frecvensa de aparisie a fiecarei cifre in scrierea in baza 10 a numarului.

#include iostream

#include fstream

#include math.h

using namespace std;

int fr[10];

int main() {

long n;

ifstream f("");

fn;

();

ofstream g("");

if(n==pow(2,floor(log(n)/log(2))))

g"ok\n";

else

g"eroare\n";

while(n){fr[n%10]++;n/=10;}

for(int i=0;i=9;i++)

gi" :: "fr[i]endl;

();

return 0;

}

13. Scrieti un program care afiseaza pe ecran toate numerele naturale cu maxim 9 cifre care sunt rotunde(numerele care convertite in binar au acelasi numar de 0 respectiv de 1).

Exemplu: 12=1100 este rotund; 13 =1101 nu este rotund )

#include iostream

#include fstream

using namespace std;

int test(long x)

{

int nr0=0;

int nr1=0;

do{

if(x%2==1)

nr1++;

else

nr0++;

x/=2;

}

while(x0);

return nr0==nr1;

}

int main() {

ofstream f("");

long x;

for(x=0;x=999999999;x++)

if(test(x))

fxendl;

();

return 0;}

14. Fisierul text contine pe prima linie un numar natural n (0n1000), iar pe a doua linie n numere naturale cu cel mult 9 cifre fiecare, despartite prin cate un spatiu. Scrieti un program C/C++ care citeste toate numerele din fisier si afiseaza pe ecran, separate prin cate un spatiu, numerele de pe a doua linie a fisierului, care sunt formate din cifre identice.

Exemplu: daca fisierul are continutul:

9

55 107 3 101 99 7 208 2222 80

numerele ce se vor afisa sunt:

55 3 99 7 2222

#include iostream

#include fstream

using namespace std;

int test(long x)

{

int uc=x%10;

while(x)

{

if(x%10!=uc)

return 0;

x/=10;

}

return 1;

}

int main() {

ifstream f("");

ofstream g("");

int n;

long x;

fn;

for(int i=1;i=n;i++)

{

fx;

if(test(x))

gx' ';}

();

();

return 0;}

contine pe prima linie un numar natural n (n=100), iar pe a doua linie, separate prin cate un spatiu, n numere naturale nenule, cu cel mult 4 cifre fiecare. Scrieti programul C/C++ care afiseaza pe ecran cifra de control a fiecarui numar (c(4568)=c(4+5+6+8)=c(23)=5).

Exemplu: daca fisierul are continutul alaturat,

7

120 346 68 9 32 0 112

atunci se afiseaza 3 4 5 9 5 0 4

#include fstream

#include iostream

using namespace std;

int cc(unsigned short int n)

{

unsigned short int sc;

while(n=10)

{

sc=0;

while(n0)

{

sc+=n%10;

n/=10;

}

n=sc;

}

return n;}

int main() {

ifstream f("");

unsigned short int n,x,i;

fn;

for(i=1;i=n;i++)

{

fx;

coutcc(x)' ';

}

();

return 0;}

16. Fisierul contine pe prima linie mai multe numere naturale in ordine crescatoare dintre care cel pusin o putere a lui 3. Scrieti un algoritm eficient care afiseaza pe ecran numerele din fisier ce sunt puteri ale lui 3.

#include iostream

#include fstream

#include math.h

using namespace std;

int main() {

ifstream f("");

long x;

while(fx)

if(log(x)/log(3)==floor(log(x)/log(3)))

coutx' ';

();

return 0;}

17. Dat n natural, sa se descompuna ca suma de puteri distincte ale lui 2.

Exemplu : 25=24+23+20.

#include fstream

#include iostream

#include math.h

using namespace std;

int main() {

long x;

cinx;

int e;/exponentul lui 2

while(x)

{

e=floor(log(x)/log(2));

cout"2^"eendl;

x-=pow(2,e);}

return 0;}

18. Sa se scrie un program care sa verifice daca suma cifrelor de pe pozitiile impare si suma cifrelor de pe pozitiile pare ale unui numar natural n citit de la tastatura sunt egale. Pozitiile se numara de la dreapta la stanga incepand cu pozitia 1. Se afiseaza sumele si un mesaj corespunzator pe ecran.

Exemplu: se citeste: n=12345 si

se afiseaza: sp=6 si simp=9 Nu coincid!

#include fstream

#include iostream

using namespace std;

int main() {

long int n;

int sp=0,simp=0;

cinn;

int p=1;

while(n) {

if(p%2)

simp+=n%10;

else

sp+=n%10;

n/=10;

p++;

}

if(sp==simp)

cout"sp="sp" si simp="simp" Coincid!";

else

cout"sp="sp" si simp="simp" Nu Coincid!";

return 0;

}

19. Sa se afiseze primele n perechi de numere prime gemene, unde n este un numar natural nenul citit de la tastatura.

Exemplu: se citeste: n=4

se afiseaza: (3 ; 5) ; (5 ; 7) ; (11 ; 13) ; (17 ; 19)

#include fstream

#include iostream

#include math.h

using namespace std;

int prim(int x)

{

for(int d=2;d=sqrt(x);d++)

if(x%d==0)

return 0;

return 1;}

int main() {

int n;

cinn;

int a=3;

while(n) {

if(prim(a) && prim (a+2))

{

cout'('a','a+2")\n";

n-;}

a+=2;}

return 0;}

20. Se citesc n numere naturale nenule. Sa se precizeze cu cate zerouri se va termina produsul numerelor fara a calcula efectiv produsul lor.

Exemplu: se citeste:n=3 si numerele25, 12, 9

se afiseaza: 2 de zero

#include iostream

#include fstream

using namespace std;

int main() {

ifstream f("");

int n,x,nr2=0,nr5=0;

fn;

while(n) {

fx;

while(x%2==0) {

nr2++; x/=2;}

while(x%5==0) {

nr5++; x/=5;}

n-;}

ofstream g("");

if(nr2nr5) gnr5;

else gnr2;

();

return 0;

}

21. Se citeste un numar natural n. Sa se afiseze toate numerele prime mai mici decat n astfel incat suma cifrelor a fiecarui numar sa fie mai mica decat un alt numar citit m.

Exemplu: se citeste: n= 30 si m=7

se afiseaza: 2, 3, 5, 11, 13, 23

#include iostream

#include fstream

#include math.h

using namespace std;

int prim(int x) {

for(int d=2;d=sqrt(x);d++)

if(x%d==0)

return 0;

return 1;}

int suma_cifre(int x) {

int s=0;

while(x0) {

s+=x%10;x/=10;}

return s;}

int main() {

ifstream f("");

int n,m;

fnm;

();

ofstream g("");

for(int i=2;in;i++)

if(prim(i)&&suma_cifre(i)m)

gi' ';

();

return 0;}

22. Fisierul contine pe primul rand doua valori naturale m si n (1=n=100, 1=m=100), reprezentand numarul de linii si respectiv de coloane ale unei matrice a, iar pe urmatoarele m linii cate n valori intregi cu maximum 4 cifre fiecare, separate prin cate un spatiu, reprezentand elementele matricei a. Afisati pe ecran un sir de 2*(n+m) – 4 numere ordonate crescator, sir format din elementele aflate pe chenarul exterior al matricei a. Chenarul exterior este format din prima si ultima linie, respectiv prima si ultima coloana din matrice.

Exemplu: daca matricea data este :

3 4

1 2 3 4

5 6 7 8

9 1 2 3

se va afisa sirul : 1 1 2 2 3 3 4 5 8 9.

#include iostream

#include fstream

using namespace std;

void citire(int a[100][100],int &m,int &n) {

ifstream f("");

fmn;

for(int i=0;i=m-1;i++)

for(int j=0;j=n-1;j++)

fa[i][j];

();

}

void Bubble_Sort(int v[400], int n) {

int sortat=0;

while(!sortat) {

sortat=1;

for(int i=0;i=n-2;i++)

if(v[i]v[i+1]) {

int aux=v[i]; v[i]=v[i+1];

v[i+1]=aux; sortat=0;}}}

void contur(int a[100][100],int m,int n,int v[400]){

int k=0,i;

for(i=0;i=n-1;i++)

v[k++]=a[0][i];

for(i=1;i=m-1;i++)

v[k++]=a[i][n-1];

for(i=n-2;i=0;i-)

v[k++]=a[m-1][i];

for(i=m-2;i=1;i-)

v[k++]=a[i][0];

}

int main() {

int a[100][100],v[400];int m;int n;

citire(a,m,n);

contur(a,m,n,v);

Bubble_Sort(v,2*(m+n)-4);

ofstream f("");

for(int i=0;i=2*(m+n)-4-1;i++)

fv[i]' ';

();

return 0;

}

23. Se citeste de la tastatura o valoare naturala m (2=m=100). Scrieti programul C/C++/Pascal care construieste in memorie si apoi afiseaza pe ecran matricea a cu m linii si m coloane de numere intregi, construita dupa urmatoarea regula : elementul de pe linia i si coloana j a matricii ( 1=i , j=m) este :

s 1 daca i*i+j*j este patrat perfect

s 2 daca i*i+j*j nu este patrat perfect, dar este numar prim mai mare decat 2

s 3 in rest.

Exemplu: pentru m = 2, se va afisa matricea :

3 2

2 3

#include fstream

#include iostream

#include math.h

using namespace std;

int pp(int x)

{return sqrt(x)==floor(sqrt(x));}

int prim(int x){

if(x2) return 0;

for(int d=2;d=sqrt(x);d++)

if(x%d==0)

return 0;

return 1;}

int main() {

int m,t[100][100],i,j;

ifstream f("");

fm;

();

for(i=1;i=m;i++)

for(j=1;j=m;j++)

if(pp(i*i+j*j))

t[i][j]=1;

else

if(i*i+j*j2 && prim(i*i+j*j))

t[i][j]=2;

else

t[i][j]=3;

ofstream g("");

for(i=1;i=m;i++){

for(j=1;j=m;j++)

gt[i][j]' ';

gendl;}

();

return 0;}

24. Se citeste un vector v cu n componente numere naturale. Sa se afiseze cel mai mare numar care se poate forma cu cifra maxima a fiecarui numar din vector.

Exemplu: se citeste: n= 5 si v=(29, 171, 0, 2222, 100)

se afiseaza: 97210

#include iostream

#include fstream

using namespace std;

int cmax(long x)

{

int cm=x%10; x/=10;

while(x) { if(x%10cm) cm=x%10; x/=10; }

return cm;

}

int c[10];

int main() {

long v[100];

int n,i;

ifstream f("");

fn;

for(i=0;i=n-1;i++)

fv[i];

();

for(i=0;i=n-1;i++)

c[cmax(v[i])]++;

ofstream g("");

for(i=9;i=0;i-)

for(int j=1;j=c[i];j++)

gi;

();

return 0;

}

25. Se considera o matrice oarecare de dimensiune mxn cu elemente numere naturale. Sa se afiseze numerele cu numar impar de divizori din matrice si sa se indice numarul lor.

Exemplu: se citeste: m=2 si n=3 si matricea

se afiseaza: 4, 25,

2 numere

#include fstream

#include iostream

using namespace std;

int nrd(int x)

{

int nr=0;

for(int d=1;d=x/2;d++)

if(x%d==0)

nr++;

return nr+1;

}

int main() {

int t[100][100],m,n,nr=0,i,j;

ifstream f("");

fmn;

for(i=0;i=m-1;i++)

for(j=0;j=n-1;j++)

ft[i][j];

();

ofstream g("");

for(i=0;i=m-1;i++)

for(j=0;j=n-1;j++)

if(nrd(t[i][j])%2==1)

{ gt[i][j]' '; nr++; }

gendlnr;

return 0;

}

26. Fie un vector v cu n elemente numere intregi citite de la tastatura. Fara a folosi alt vector auxiliar, sa se mute la sfarsitul lui v elementele sale nule, pastrand ordinea celorlalte elemente.

Exemplu: se citeste: n=7 si vectorul v=(2,3,0,9,0,0,8)

se afiseaza: v=(2,3,9,8,0,0,0)

#include iostream

#include fstream

using namespace std;

int main() {

long v[100];

int n,i;

ifstream f("");

fn;

for(i=0;i=n-1;i++)

fv[i];

();

int test=0;

while(!test) {

test=1;

for(i=0;i=n-2;i++)

if(v[i]==0 && v[i+1])

{ int aux=v[i]; v[i]=v[i+1]; v[i+1]=aux; test=0; }}

ofstream g("");

for(i=0;i=n-1;i++)

gv[i]' ';

();

return 0;}

27. Fie a o matrice patratica de dimensiune n. Folosind o functie de ordonare a unui vector de dimensiune k, afisati matricea modificata prin ordonarea crescatoare a liniilor impare.

#include iostream

#include fstream

using namespace std;

void sortare(long x[100], int n){

int sortat=0;

int i;

while(!sortat) {

sortat=1;

for(i=0;i=n-2;i++)

if(x[i]x[i+1]) {

long aux=x[i];

x[i]=x[i+1];

x[i+1]=aux;

sortat=0;}}

}

int main() {

long x[100][100],n;

ifstream f("");

fn;

int i,j;

for(i=0;i=n-1;i++)

for(j=0;j=n-1;j++)

fx[i][j];

();

for(i=0;i=n-1;i+=2)

sortare(x[i], n);

for(i=0;i=n-1;i++){

for(j=0;j=n-1;j++)

coutx[i][j]' ';

coutendl;}

return 0;

}

28. Fisierul contine pe prima linie un numar natural n (0=n=5000), iar pe urmatoarele 2n linii cate n numere naturale de cel mult 5 cifre fiecare, separate prin cate un spatiu reprezentand elementele a doua matrice a si b cu cate nXn elemente fiecare. Verificati daca b este obtinuta din a prin rotirea spre stanga cu 270 de grade, afisand un mesaj afirmativ sau „nu".

Exemplu:

Daca fisierul are urmatorul continut :

3

1 2 3

3 4 5

5 6 7

5 3 1

6 4 2

7 5 3

atunci se va afisa "DA"

#include iostream

#include fstream

using namespace std;

int main() {

long a[100][100],b[100][100],n;

ifstream f("");

fn;

int i,j;

for(i=0;i=n-1;i++)

for(j=0;j=n-1;j++)

fa[i][j];

for(i=0;i=n-1;i++)

for(j=0;j=n-1;j++)

fb[i][j];

();

/linia i din a trebuie sa coincida cu coloana n-1-i din b

int test=1;

/test devine 0 in caz de nepotrivire

for(i=0;i=n-1i++)

for(j=0;j=n-1j++)

if(a[i][j]!=b[j][n-1-i])

test=0;

if(test) cout"DA"; else cout"NU";

return 0;

}

29. Data o matrice cu elemente numere intregi de dimensiune nXm sa se determine punctele-sa din matrice, adica elementele care sunt minime pe linia lor si maxime pe coloana lor. in cazul in care nu exista se va afisa mesajul "NU".

Exemplu=3;

4 3 6

12 1 4 = numarul 3 este sa.

5 0 7

#include iostream

#include fstream

using namespace std;

int main() {

long x[100][100],n,m;

ifstream f("");

fnm;

int i,j;

for(i=1;i=n;i++)

for(j=1;j=m;j++)

fx[i][j];

();

/pastram maximul coloanei i in x[0][i]

/pastram minimul liniei i in x[i][0]

for(i=1;i=n;i++)

for(j=1;j=m;j++){

if(x[i][j]x[0][j])

x[0][j]=x[i][j];

if(x[i][j]x[i][0])

x[i][0]=x[i][j];

}

for(i=1;i=n;i++)

for(j=1;j=m;j++)

if(x[i][j]==x[i][0] && x[i][j]==x[0][j])

coutx[i][j]' ';

return 0;

}

30. Fie n si m doua numere naturale citite de la tastatura. Sa se formeze un tablou bidimensional cu n linii si m coloane cu primele n×m numere naturale imperfecte. Un numar natural n este perfect daca suma S a divizorilor sai mai mici decat n este egala de numarul n (exceptand numarul insusi ).

Exemplu:n=2, m=3 atunci matricea este

1 2 3

4 5 7

! 6 este numar perfect – 6=1+2+3

#includeiostream.h

#includeconio.h

int n,v[100],i,j;

void citire()

{cout"n="; cinn;

}

int perfect(int a)

{int s=1,d;

for(d=2;d=a/2;d++) if(a%d==0) s=s+d;

if(s==a) return 1;

return 0;

}

void vector(int n,int v[100])

{int sw=1,t=1,i=1;

while(sw!=0){if(perfect(i)==0||i==1) {v[t]=i;

if(t==n*n) sw=0;

t++;

}

i++;

}

}

void afis()

{coutendl;

for(i=1;i=n*n;i++)

if(i%n==0) coutv[i]endl;

else coutv[i]" ";

}

void main()

{clrscr();

citire();

vector(n,v);

afis();

getch();

}

31. Scrieti un program C/C++ care citeste de la tastatura un numar natural n (2n20), construieste in memorie si afiseaza pe ecran o matrice cu n linii si n coloane, numerotate de la 1 la n. Fiecare element din matrice aflat pe o linie impara va fi egal cu numarul liniei pe care se afla iar elementele de pe linii pare sa fie completate cu valorile de la n la 1. Elementele matricei vor fi afisate pe ecran, cate o linie a matricei pe cate o linie a ecranului cu cate un spatiu intre elementele fiecarei linii.

Exemplu: pentru n=5 se va afisa matricea de mai jos

1 1 1 1 1

5 4 3 2 1

3 3 3 3 3

5 4 3 2 1

5 5 5 5 5

#includeiostream.h

#includeconio.h

int n,a[20][20],i,j;

void citire()

{cout"n="; cinn;

}

void formare()

{for(i=1;i=n;i++)

for(j=1;j=n;j++) if(i%2==1)a[i][j]=i;

else a[i][j]=n-j+1;

}

void afis()

{for(i=1;i=n;i++)

for(j=1;j=n;j++){gotoxy(j*3,i+4);

couta[i][j];

}

}

void main()

{clrscr();

citire();

formare();

afis();

getch();

}

32. Se dau numarul de n linii si m coloane a unei se construiasca si sa se afiseze matricea in fisierul stiind ca elementul din pozitia i,j este egal cu minimul dintre i si j. Afisarea se realizeaza prin intermediul unui vector construit prin parcurgerea matricei sub forma de L.

#includeiostream.h

#includeconio.h

int n,a[20][20],i,j,v[100];

void citire()

{cout"n="; cinn;

}

void formare()

{for(i=1;i=n;i++)

for(j=1;j=n;j++) if(ij)a[i][j]=j;

else a[i][j]=i;

}

void afis()

{for(i=1;i=n;i++)

for(j=1;j=n;j++){gotoxy(j*3,i+4);

couta[i][j];

}

coutendl;

}

void vector()

{int t,k=0;

for(t=1;t=n;t++)

{for(j=1;j=n-t;j++)v[++k]=a[j][t];

for(j=t;j=n;j++) v[++k]=a[n-t+1][j];

}

}

void main()

{clrscr();

citire();

formare();

afis();

vector();

for(i=1;i=n*n;i++) coutv[i]" ";

getch();

}

33. Fisierul text contine pe prima linie un numar natural nenul n (1=n=100) si pe urmatoarea linie n numere reale pozitive separate prin cate un spatiu. Scrieti un program C/C++ care citeste din fisierul numarul natural n, si determina, utilizand un algoritm eficient din punct de vedere al timpului de executare si al memoriei utilizate, pozisia pe care se afla primul si ultimul numar din cele n numere reale care sunt egale cu valoarea minima dintre ele.

Exemplu: Daca fisierul are continutul:

6

2.8 2.3 5.7 5.7 2.3 6.3

atunci se afiseaza 2 si 5 (valoarea minima este 2.3 si numerele de pe pozitia 2 si 5 sunt egale cu 2.3)

#includeiostream.h

#includeconio.h

int n,i;

float v[100];

void citire()

{cout"n="; cinn;

for(i=1;i=n;i++) cinv[i];

}

float minim()

{float min;

min=v[1];

for(i=2;i=n;i++) if(minv[i]) min=v[i];

return min;

}

void main()

{float a; int b;

clrscr();

citire();

a=minim();

for(i=1;i=n;i++)if(v[i]==a){couti" ";

i=n+1;

b=i;

}

for(i=n;i=1;i-) if(v[i]==a){if(i!=b)couti;

i=0;

}

getch();

}

34. Scrieti un program C/C++ care citeste de la tastatura un numar natural n (1=n=20), elementele unei matrice cu n linii si n coloane, numere intregi din intervalul [-100, 100] si afiseaza pe ecran m1 si m2, unde m1 este media aritmetica a elementelor strict pozitive ale matricei, situate deasupra diagonalei principale, iar m2 este media aritmetica a elementelor strict pozitive ale matricei, situate sub diagonala principala, ca in exemplu. Cele doua medii se considera egale cu 0 daca nu exista valori strict pozitive in zonele corespunzatoare.

Exemplu: pentru n=4 si matricea alaturata se afiseaza

m1=2.75, calculata din elementele aflate deasupra diagonalei

principale, si m2=2.5, calculata din elementele aflate sub diagonala principala.

-1 2 -4 5

0 6 3 1

2 4 2 0

3 -5 1 -3

#includeiostream.h

#includeconio.h

int a[20][20],n,i,j,k,t;

float m1,m2;

void citire()

{cout"n="; cinn;

for(i=1;i=n;i++)

for(j=1;j=n;j++){gotoxy(j*7,i+9);

cina[i][j];

}

}

float sumaunu()

{float s=0;

for(i=1;i=n;i++)

for(j=i+1;j=n;j++) if(a[i][j]0){s=s+a[i][j];

k++;

}

m1=s/k;

return m1;

}

float sumadoi()

{float s=0;

for(i=1;in;i++)

for(j=1;ji;j++)if(a[i][j]0){s=s+a[i][j];

t++;

}

m2=s/t;

return m2;

}

void main()

{clrscr();

citire();

cout"Media aritmetica a elementelor strict pozitive de deasupra diagonalei principale este "sumaunu();

cout"Media aritmetica a elementelor strict pozitive de dedesubtul diagonalei principale este "sumadoi();

getch();

}

35. Scrieti un program C/C++ care citeste de la tastatura numerele intregi m si n (1=m=50, 1=n=50) si elementele unui tablou bidimensional cu m linii si n coloane, numere intregi distincte de cel mult 4 cifre fiecare. Programul va afisa pe prima linie a ecranului numarul de elemente prime de pe fiecare coloana a matricii, separate prin cate un o functie care verifica daca un numar intreg este prim si folosii apeluri ale ei pentru rezolvarea cerintei.

Exemplu: pentru m=3 si n=4 si tabloul de mai jos

2 7 1 4

14 6 12 3

9 22 8 5

Pe ecran se va afisa:

3 1 1

#includeiostream.h

#includeconio.h

int a[20][20],n,i,j;

void citire()

{cout"n="; cinn;

for(i=1;i=n;i++)

for(j=1;j=n;j++){gotoxy(j*7,i+9);

cina[i][j];

}

}

int prim(int a)

{int d;

for(d=2;d=a/2;d++) if(a%d==0) return 0;

return 1;

}

void main()

{clrscr();

citire();

for(i=1;i=n;i++)

for(j=1;j=n;j++)if(prim(a[j][i])==1) couta[j][i]" ";

getch();

}

36. Fie x un vector de numere intregi de lungime n, sa se construiasca un vector y, astfel incat y[i]=numarul de aparitii ale lui x[i] in vectorul x.

Exemplu: Pentru x=(1,5,2,1,5,7,2,1,5) se obtine y=(3,3,2,3,3,1,2,3,3).

#includeiostream.h

#includeconio.h

int v[50],y[50],n,i,j,k;

void citire()

{cout"n="; cinn;

for(i=1;i=n;i++)cinv[i];

}

int aparitie(int a)

{int s=0;

for(i=1;i=n;i++)if(v[i]==a)s++;

return s;

}

void formare(int n,int v[50],int y[50])

{for(j=1;j=n;j++){k=aparitie(v[j]);

y[j]=k;

}

}

void afis(int n,int x[100])

{for(i=1;i=n;i++) coutx[i]" ";

coutendl;

}

void main()

{clrscr();

citire();

formare(n,v,y);

afis(n,v);

afis(n,y);

getch();

}

37. Scrieti un program care citeste de la tastatura doua numere naturale nenule m si n si care construieste in memorie si apoi afiseaza o matrice A cu m linii si n coloane cu proprietatea ca fiecare element aij memoreaza cea mai mica dintre valorile indicilor i si j. Matricea se va afisa in fisierul , cate o linie a matricei pe cate o linie a ecranului, elementele fiecarei linii fiind separate prin cate un spatiu.

Exemplu: Pentru m=4 si n=5 fisierul va consine matricea alaturata

#includeiostream.h

#includeconio.h

int a[20][20],n,m,i,j;

void citire()

{cout"n="; cinn;

cout"m="; cinm;

}

void formare()

{for(i=1;i=n;i++)

for(j=1;j=m;j++)if(ij)a[i][j]=i;

else a[i][j]=j;

}

void afis()

{for(i=1;i=n;i++)

for(j=1;j=m;j++){gotoxy(j*3,i+5);

couta[i][j];

}

}

void main()

{clrscr();

citire();

formare();

afis();

getch();

}

38. Se citesc de la tastatura doi vectori cu cate n elemente. Afisati ultima cifra a sumei fara a calcula efectiv suma.

#includeiostream.h

#includeconio.h

int n,a[100],b[100],i;

void citire()

{cout"Dati numarul de elemente:"; cinn;

for(i=1;i=n;i++) {cina[i];

cinb[i];

}

}

int ultimacifra(int n,int a[100],int b[100])

{int s=0;

for(i=1;i=n;i++){s=s+a[i]+b[i];

s=s%10;

}

return s;

}

void main()

{clrscr();

citire();

cout"Suma se termina cu cifra:"ultimacifra(n,a,b);

getch();

}

39. Scrieti un program care construieste in memorie o matrice patratica de ordin n cu elemente numere naturale astfel incat pe diagonala principala sa existe numai elemente egale cu 1, elementele de pe cele doua « semidiagonale » paralele cu diagonala principala si alaturate diagonalei principale sa fie toate egale cu 2, elementele de pe urmatoarele doua « semidiagonale » sa fie egale cu 3,etc.

Valoarea lui n se citeste de la tastatura, iar matricea se va afisa pe ecran.

Pentru n=4 se va afisa tabloul :

1 2 3 4

2 1 2 3

3 2 1 2

4 3 2 1

#includeiostream.h

#includeconio.h

int a[20][20],n,m,i,j;

void citire()

{cout"n="; cinn;

}

void formare()

{for(i=1;i=n;i++)

for(j=n;j=i;j-){a[i][j]=j-i+1;

a[j][i]=a[i][j];

}

}

void afis()

{for(i=1;i=n;i++)

for(j=1;j=n;j++){gotoxy(j*3,i+4);

couta[i][j];

}

}

void main()

{clrscr();

citire();

formare();

afis();

getch();

}

39. Fie a un vector cu n componente reale (n=30). Sa se obtina din a vectorul b care sa indeplineasca conditiile :

- b[i]=b[i+1] pentru i=1,2,…,k-1

- b[i]=b[i+1] pentru i=k,k+1, , n-1

- b[k-i]=b[k+i] pentru i=1,2, …, k-1, unde k=n/2 cand n este par si k=(n+1)/2 cand n este impar.

#includeiostream.h

#includeconio.h

int v[50],n,b[50],i,j;

void citire()

{cout"n="; cinn;

for(i=1;i=n;i++) cinv[i];

}

void sortare()

{int sw,aux;

do{sw=1;

for(i=1;in;i++) if(v[i]v[i+1]){aux=v[i];

v[i]=v[i+1];

v[i+1]=aux;

sw=0;

}

}while(sw==0);

}

void formare(int &t,int b[50])

{t=0;

for(i=1;i=n/2;i++)b[++t]=v[i];

for(i=n;i=n/2;i-)b[++t]=v[i];

}

void afis(int m,int x[100])

{for(i=1;i=m;i++) coutx[i]" ";

coutendl;

}

void main()

{int t;

clrscr();

citire();

afis(n,v);

sortare();

formare(t,b);

afis(n,b);

getch();

}

40. Se citeste de la tastatura o matrice a cu m linii si n coloane, ale carei elemente sunt cifre de la 0 la 9 (0=m,n=5). Sa se afiseze suma numerelor care se pot forma cu cifrele fiecarei linii (numarul aferent fiecarei linii se va obsine prin citirea cifrelor de pe linia respectiva de la stanga la dreapta, ignorandu-se zerourile de la inceputul liniei).

Exemplu : Pentru matricea :

0 3 8 2 5

0 0 5 1 4

0 7 7 9 3 se va afisa valoarea 12132 reprezentand suma 3825+514+7793.

#includeiostream.h

#includeconio.h

int a[20][20],n,m,i,j;

void citire()

{cout"n="; cinn;

for(i=1;i=n;i++)

for(j=1;j=n;j++){gotoxy(j*3,i+4);

cina[i][j];

}

}

int numar(int t)

{int p=0;

for(i=1;i=n;i++)if(a[t][i]!=0) p=p*10+a[t][i];

else if(p!=0) p=p*10+a[t][i];

return p;

}

int suma()

{int s=0,b;

for(j=1;j=n;j++){b=numar(j);

coutb" ";

s=s+b;

}

return s;

}

void main()

{clrscr();

citire();

cout"Suma obtinuta este "suma();

getch();

}

41. Scrieti un program care construieste in memorie o matrice t patratica de ordin n cu elemente numere naturale astfel incat pe ultima coloana si pe ultima linie sa se afle numai elemente egale cu 1, iar oricare alt element al matricei sa fie egal cu suma dintre elementul aflat imediat sub el si elementul aflat imediat in dreapta lui.

Exemplu : Pentru n =4 se va afisa tabloul urmator :

20 10 4 1

10 6 3 1

4 3 2 1

1 1 1 1

includeiostream.h

#includeconio.h

int a[20][20],n,m,i,j;

void citire()

{cout"n="; cinn;

for(i=1;i=n;i++){a[n][i]=1;

a[i][n]=1;

}

}

void formare()

{for(i=n-1;i=1;i-)

for(j=n-1;j=1;j-)a[i][j]=a[i+1][j]+a[i][j+1];

}

void afis()

{for(i=1;i=n;i++)

for(j=1;j=n;j++){gotoxy(j*3,i+5);

couta[i][j];

}

}

void main()

{clrscr();

citire();

formare();

afis();

getch();

}

42. Scrieti programul C, C++ sau Pascal, care citeste de la tastatura un sir s de cel mult 30 de caractere si un caracter c. Programul determina triplarea fiecarei aparitii a caracterului c in s si scrie noul sir obtinut in fisierul text . (neintensiv: sirul poate fi scris in fisier fara a fi construit efectiv in memorie)

De exemplu, daca se citeste sirul : ciocarlie si caracterul c atunci fisierul va contine sirul : ccciocccarlie.

#includeiostream.h

#includestring.h

#includeconio.h

void main()

{char cuv[100],ch;

int i,n,j;

clrscr();

cout"Dati cuvantul:"endl;

(cuv,30); ();

cout"Dati caracterul ch:"; cinch;

n=strlen(cuv);

for(i=0;in;i++)if(cuv[i]==ch)

{for(j=n;ji+1;j-)cuv[j]=cuv[j-1];

cuv[i+1]=ch;

n++;

i++;

for(j=n;ji+1;j-)cuv[j]=cuv[j-1];

n++;

cuv[i+1]=ch;

i=i+2;

}

cuv[n]=NULL;

coutcuv;

getch();

}

43. Fisierul cuv_ contine mai multe cuvinte ordonate alfabetic. Pentru un cuvant c dat de la tastatura generati fisierul cuv_ contine cuvintele din primul fisier si cuvantul c, toate in ordine alfabetica.

#includeiostream.h

#includestring.h

#includeconio.h

void main()

{char cuv[100][100],ch[100];

int i,n,sw=1,j;

clrscr();

cout"Dati nr de cuvinte:"; cinn;

();

for(i=1;i=n;i++){(cuv[i],20);

();

}

(ch,20);

if(strcmp(cuv[1],ch)=0){for(j=n+1;j=1;j-) strcpy(cuv[j],cuv[j-1]);

strcpy(cuv[1],ch);

n=n+1;

sw=0;

}

else for(i=2;i=n;i++)if(strcmp(cuv[i],ch)=0)

{for(j=n+1;j=i;j-)strcpy(cuv[j],cuv[j-1]);

strcpy(cuv[i],ch);

n++;

sw=0;

i=n+3;

}

if(sw==1){strcpy(cuv[n+1],ch);

n++;

}

for(i=1;i=n;i++) coutcuv[i]endl;

getch();

}

44. Definiti structura fractie care memoreaza in campul a al structurii numaratorul, iar in campul b numitorul fracsiei. Citisi numitorul si numaratorul a n fracsii. Pentru fiecare fracsie sa se verifice daca este ireductibila, in caz afirmativ sa se afiseze, iar in caz contrar sa se afiseze numitorul si numaratorul dupa simplificare.

#includeiostream.h

#includeconio.h

struct fractie{int a;

int b;

};

fractie f;

void citire()

{cout"Dati numaratorul fractiei:"; cinf.a;

cout"Dati numitorul fractiei:"; cinf.b;

}

int divizor(int p,int t)

{int i;

if(pt)for(i=t;i1;i-) if(p%i==0&&t%i==0) return i;

for(i=p;i1;i-)if(p%i==0&&t%i==0) return i;

return 0;

}

void main()

{clrscr();

citire(); int k;

k=divizor(f.a,f.b);

if(k!=0) cout"Fractia simplificata este "f.a/k"/"f.b/k;

else cout"Fractia este ireductibila";

getch();

}

45. Se considera un text cu maximum 255 de caractere in care cuvintele sunt separate prin unul sau mai multe spatii. Primul caracter din textul citit este o litera, iar cuvintele sunt formate numai din litere mici ale alfabetului englez. Scrieti un program C/C++ care citeste de la tastatura textul si il transforma inlocuind prima litera a fiecarui cuvant cu litera mare corespunzatoare, restul caracterelor ramanand nemodificate. Textul astfel transformat va fi afisat pe ecran.

Exemplu: daca de la tastatura se introduce textul: clasa elev scoala se va afisa pe ecran: Clasa Elev Scoala

#includeiostream.h

#includestring.h

#includeconio.h

#includectype.h

void main()

{char cuv[100];

int i,n;

clrscr();

(cuv,30);

n=strlen(cuv);

cuv[0]=toupper(cuv[0]);

for(i=1;in;i++) if(cuv[i]==' '&&cuv[i+1]!=' ')cuv[i+1]=toupper(cuv[i+1]);

coutcuv;

}

46. Se da o inregistrare cu numele cerc,in care sunt stocate abscisa si ordonata centrului cercului si raza acestuia. Pentru un n numar natural 100, citisi datele caracteristice a n cercuri, sortasi structurile descrescator in funcsie de diametru si afisasi coordonatele centrelor cercurilor in ordinea obsinuta dupa ordonare.

#includeiostream.h

#includeconio.h

struct cerc

{int x;

int y;

float r;

};

cerc c[100];

int n,i;

void citire()

{cout"Dati numarul de cercuri:"; cinn;

for(i=1;i=n;i++){cout"Dati abscisa centrului cercului:";

cinc[i].x;

cout"Dati ordonata centrului cercului:";

cinc[i].y;

cout"Dati raza cercului:";

cinc[i].r;

}

}

void ordonare()

{int sw,aux1,aux2;

float aux3;

do{sw=1;

for(i=1;in;i++) if(2*c[i].r=2*c[i+1].r){sw=0;

aux1=c[i].x;

c[i].x=c[i+1].x;

c[i+1].x=aux1;

aux2=c[i].y;

c[i].y=c[i+1].y;

c[i+1].y=aux2;

aux3=c[i].r;

c[i].r=c[i+1].r;

c[i+1].r=aux3;

}

}while(sw==0);

}

void main()

{clrscr();

citire();

ordonare();

for(i=1;i=n;i++)

cout"Cercul de centrul("c[i].x","c[i].y") si de raza "c[i].rendl;

getch();

}

47. Scrieti programul C/C++ care citeste de la tastatura un numar de n siruri de cel mult 40 de caractere, formate doar din litere mici ale alfabetului englez. Sa se verifice daca sirul de pe pozitia i se termina cu acelasi caracter cu care incepe sirul de pe pozitia i+1, pentru i de la 1 la n-1.

Se va afisa pe ecran mesajul Sirurile citite verifica proprietatea sau Sirurile citite nu verifica proprietatea

Exemplu: daca se citeste sirul n=4 si sirurile

proba

a

acoperit

tot

atunci pe ecran se va afisa: Sirurile citite verifica proprietatea

#include iostream

#include string

using namespace std;

int main() {

char curent[41], anterior[41];

int n;

cinn;

();

(curent,41);

int test=1;

for(int i=1;i=n-1;i++)

{

strcpy(anterior,curent);

();

(curent,41);

if(anterior[strlen(anterior)-1]!=curent[0])

test=0;

}

if(test)

cout"Sirurile citite verifica proprietatea.";

else

cout"Sirurile citite nu verifica proprietatea.";

return 0;

}

48. Fisierul text este alcatuit din mai multe linii de lungime variabila, pe fiecare linie gasindu-se cate un cuvant. Scrieti un program care afiseaza linia (liniile) de lungime maxima.

Exemplu: Pentru fisierul „": Se va afisa:

informatica informatica

isoscel programator

triunghi

trapez

programator

caiet

#include fstream

#include iostream

#include string

using namespace std;

int main() {

char cuvant[200];

int max=0;

ifstream f("");

while((cuvant,200))

if(strlen(cuvant)max)

max=strlen(cuvant);

();

ifstream g("");

while((cuvant,200))

if(strlen(cuvant)==max)

coutcuvantendl;

();

return 0;

}

49. Fie s1 si s2 doua siruri de caractere. Verificati daca s2 este o codificare „shift" a lui s1(o codificare „shift" se obtine din s1 prin adagarea la codul ASCII al fiecarui caracter din s1 a unei constante k) afisand in caz afirmativ valoarea lui k sau mesajul „NU" in caz contar.

Ex: Pentru sirurile s1="acdrtu" si s2="ceftvx" se afiseaza k=2.

#include iostream

using namespace std;

int test(char *s1, char *s2)

{

if(strlen(s1)!=strlen(s2))

return 0;

int d=s1[0]-s2[0];

for(int i=1;i=strlen(s1)-1;i++)

if(d!=s1[i]-s2[i])

return 0;

return 1;

}

int main() {

char s1[30],s2[30];

(s1,30);

();

(s2,30);

couttest(s1,s2);

if(test(s1,s2)) cout' 's2[0]-s1[0];

return 0;

}

50. Scrieti un program care citeste de la tastatura un sir de caractere ce contine litere mici si spatii. Afisati cuvantul cu cele mai multe vocale (daca exista mai multe se va afisa unul singur). Exista cel pusin un cuvant ce consine vocale.

#include iostream

#include string

using namespace std;

int nrv(char *s)

{

int k=0;

for(int i=0;i=strlen(s)-1;i++)

if(strchr("aeiouAEIOU",s[i]))

k++;

return k;

}

int main() {

char propozite[1000], *cuvant, cuvant_max[20];

int nrv_max=0;

(propozite,1000);

cuvant=strtok(propozite," ");

while(cuvant) {

int aux=nrv(cuvant);

if(auxnrv_max) {

nrv_max=aux;

strcpy(cuvant_max,cuvant);

}

cuvant=strtok(NULL," ");

}

coutcuvant_max;

return 0;

}


End file.
